/*

* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
* |     Smart-Shop开源商城系统/ Java商城-首选电商平台系统 请务必保留此注释头信息
* |     开源地址: https://gitee.com/ningbo-qishan/gruul-mall
* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
* |     可正常分享和学习源码,未经授权 不可商用！
* |     商业版中台购买/开源版商业授权 联系技术客服
* |     官网:  https://www.73app.cn/
* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
* |     Copyright (c) 2016-2999 宁波启山智软科技有限公司
* |     版权所有 ,侵权必究！
* ------------------------------------------------------------------------

*/
package com.medusa.gruul.account.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.medusa.gruul.account.api.entity.MemberCardBaseInfo;
import com.medusa.gruul.account.api.entity.MemberCardInfo;
import com.medusa.gruul.account.api.entity.MemberSwitch;
import com.medusa.gruul.account.api.model.MemberCardInfoListDto;
import com.medusa.gruul.account.api.model.MemberCardInfoListResultDto;
import com.medusa.gruul.account.model.dto.MemberCardInfoRankStatusDto;
import com.medusa.gruul.account.model.dto.MemberCardInfoStatusDto;
import com.medusa.gruul.account.model.vo.*;
import com.medusa.gruul.payment.api.model.dto.PayResultDto;
import com.medusa.gruul.payment.api.model.dto.WxPayNotifyResultDto;

import java.util.List;

/**
 * @Description 会员卡信息 服务类
 * @Author zhaokw
 * @Date 23:26 2020\5\13 0013
 **/
public interface IMemberCardInfoService extends IService<MemberCardInfo> {

    /**
     * 后台关闭打开会员卡功能
     *
     * @param memberCardInfoStatusDto com.medusa.gruul.account.model.dto.MemberCardInfoStatusDto
     */
    void setMemberCardInfoStatus(MemberCardInfoStatusDto memberCardInfoStatusDto);


    /**
     * 获取指定租户下的会员卡信息
     *
     * @return com.medusa.gruul.account.model.vo.MemberCardInfoListVo
     */
    MemberCardInfoListVo getMemberCardInfo();

    /**
     * 后台停用开启会员卡各个等级
     *
     * @param memberCardInfoRankStatusDtoList com.medusa.gruul.account.model.dto.MemberCardInfoRankStatusDto
     */
    void updateMemberCardInfoStatus(List<MemberCardInfoRankStatusDto> memberCardInfoRankStatusDtoList);

    /**
     * 后台保存会员卡信息
     *
     * @param memberCardInfo com.medusa.gruul.account.model.vo.MemberCardInfoListVo
     */
    void saveMemberCardInfo(MemberCardInfoListVo memberCardInfo);

    /**
     * 获取指定租户会员卡基本信息
     *
     * @param tenantId 租户id
     * @return com.medusa.gruul.account.api.entity.MemberCardBaseInfo
     */
    MemberCardBaseInfo getByMemberBaseInfo(String tenantId);

    /**
     * 小程序端购买弹框点击确认付款或确认兑换
     *
     * @param confirmPaymentVo
     * @return com.medusa.gruul.payment.api.model.dto.PayResultDto
     */
    PayResultDto confirmPayment(ConfirmPaymentVo confirmPaymentVo);
    /**
     *  pay page
     */
    Object confirmPaymentPage(ConfirmPaymentPageVO confirmPaymentPage);

    /**
     * 会员开卡处理
     *
     * @param wxPayNotifyResultDto com.medusa.gruul.payment.api.model.dto.WxPayNotifyResultDto
     */
    void memberCompleted(WxPayNotifyResultDto wxPayNotifyResultDto);

    /**
     * 小程序端购买会员卡填写信息
     *
     * @param registerDataVo com.medusa.gruul.account.model.vo.RegisterDataVo
     * @return com.medusa.gruul.account.model.vo.MemberCardInfoResVo
     */
    MemberCardInfoResVo updateRegisterData(RegisterDataVo registerDataVo);

    /**
     * 小程序会员中心
     *
     * @return com.medusa.gruul.account.model.vo.MemberCenterVo
     */
    MemberCenterVo memberCenter();

    /**
     * 小程序端会员卡记录
     *
     * @return com.medusa.gruul.account.model.vo.MemberCardRecordVo
     */
    List<MemberCardRecordVo> getMemberCardRecord();

    /**
     * 获取会员开关功能
     *
     * @return com.medusa.gruul.account.api.entity.MemberSwitch
     */
    List<MemberSwitch> getMemberCardInfoSwitch();

    /**
     * 获取指定表单列表
     *
     * @return 会员表单列表
     */
    List<MemberRegisterFormVo> getRegisterForm();

    /**
     * 获取指定租户的指定开卡方式的会员卡 (小程序端)
     *
     * @param memberCardInfoListDto com.medusa.gruul.account.api.model.MemberCardInfoListDto
     * @return com.medusa.gruul.account.api.model.MemberCardInfoListResultDto
     */
    List<MemberCardInfoListResultDto> getMemberCardInfoList(MemberCardInfoListDto memberCardInfoListDto);


    /**
     * 获取会员卡开启状态
     *
     * @param tenantId 租户id
     * @return java.lang.Integer
     */
    Integer memberSwitch(String tenantId);


    /**
     * 生成初始化sql
     *
     * @param jsonData
     */
    void memberInit(String jsonData);

    /**
     * 获取当前使用的会员卡
     *
     * @param tenantId 租户id
     * @return com.medusa.gruul.account.api.entity.MemberCardInfo
     */
    List<MemberCardInfo> getCurrentMemberCardInfo(String tenantId);
}
